PICWWを使ってプログラムを書き込もう!



<項目>PICWWを使ってみよう!
MPLABで作成したオブジェクトファイル(HEXファイル)をPICWWを使って書き込んでみましょう。ここでは、すでにPICWWを使ったターゲットボードの調整や、オプション()の書き込み設定()...が正しくできていることを前提とします。PICWW.EXEをクリックすると、図1のようにPICWWが立ち上がります。デフォルトは、「PIC16F84」となっていますので、「PIC16F877」を選択します。また、その右隣の空欄は「PIC」を選択します。

PICWWのメイン画面
図1. PICWWのメイン画面

ここで、プログラム()のHEXファイルを開く()...クリックするとファイル名を入力する画面が開きます。前回、MPLABで生成したHEXファイル名(ここの例では、spectrum.hex )を指定してやると、図2のように新規プログラムの欄にHEXファイルの内容が表示されます。

PICWWに表示されたHEXファイルの内容
図2. PICWWに表示されたHEXファイルの内容

それでは、ターゲットボードのゼロプレッシャーソケットにPIC16F877を装着してください。ただし、PICの脱着時には、電源を必ず切っておきます。

<項目>イレースチェック
まず、デバイス()のイレース・チェック()をクリックしてみてください。新しいPICを使っていれば、図3のように「イレースされています」というメッセージが出るはずです。もし、書き込みがされていないPICで「イレースされていません」というメッセージが出たら、PICとターゲットボードとの接続をもう一度チェックしてください。

イレースチェックの結果表示(イレースされている) イレースチェックの結果表示(イレースされていない)
図3. イレースチェックの結果表示


<項目>プログラムの書き込み開始
それでは、いよいよ書き込みをします。プログラム()のプログラムの書き込み() をクリックするか、もしくはキーボードの「F6」を押してみてください。図4のように書き込み確認のメッセージがでますので、はい()をクリックすると書き込みが開始されます。

書き込みの確認
図4. 書き込みの確認

正常に書き込みが進行している時は、「書き込み中」という表示が出ています。正常に終了すると図5のような「書き込み完了」のメッセージが表示されますので、「OK」をクリックします。もし、図6のような書き込み失敗のメッセージが表示されたら、PICWWの書き込み設定でWAITをより大きくして、もう一度書き込みをしてみましょう。WAITを大きくしても書き込みに失敗する場合には、PICとターゲットボードとの接続をもう一度チェックしてください。書き込みに失敗したアドレスとデータが分かるようになっています。



書き込み完了の表示
書き込み失敗の表示
図5.書き込み完了の表示 図6.書き込み失敗の表示


<項目>コンペアによる確認
ここで念のため、HEXファイルの内容と、書き込まれたPICの内容が一致しているかどうかの確認をします。プログラム()のコンペア()を実行します。コンペアの結果ですが、一致した場合には図7のようなメッセージが表示され「OK」をクリックして完了です。もし、一致しなかった場合には図8のようなメッセージが表示されます。メッセージには一致していない最初のアドレスと比較データが分かるようになっています。


一致した結果
一致しなかった結果
図7. 一致した結果 図8. 一致しなかった結果


<項目>コンフィグレーションの書き込みここがポイント
次に、コンフィグレーションの書き込みを行います。PICには、通常のプログラムメモリとは全くアドレスの異なるところに2種類の特殊なメモリがあります。一つはIDワードで、もう一つはコンフィグレーションビットです。デバイス()のコンフィグの書き込み()で図9のコンフィグレーションの設定画面が開きます。
IDの書き込みですが、7文字以内の英数字を記入します。このIDワードと呼ばれる特殊メモリ領域は2000Hから2003H番地にある4ワード(1ワード=14ビット)の領域で、通常のプログラム実行中には読み書きできないものです。ライターでプログラムを書き込むときに、読み書き可能です。
これは、あっても無くても構いません。IDレジスタの使い方は自由となっており、あなた次第です。一般的に、プログラム作成年月日、バージョン、プログラム管理用番号などを書いておくとよいでしょう。ここでの例は、「PORT B」という名前(ID)をつけています。

コンフィグレーションの設定
図9. コンフィグレーションの設定

オシレータの詳細は表1を参照してください。発振回路を形成するのに使うPIC内部の回路には4種類の発振モードがあり、接続する振動子の種類によって表1のように使い分けます。通常は「HS」にします。

表1.クロック発振モード(オシレータ)一覧
モード 説明 発振周波数範囲 特徴
LP 低電力/水晶発振
(Low Power X'tal)
200kHz以下 極低消費電力動作が可能
XT 水晶/セラミック発振
(X'tal/Resonator)
4MHz以下 標準的
HS 高周波水晶/セラミック発振
(High Speed X'tal/Resonator)
4MHz〜20MHz 高速動作
RC nowrapRC発振
(Resister/Capacitor)
約1MHz以下
(4MHzもあり)
周波数精度は悪いが安価


次に各PICのコンフィグレーションビットの機能について設定します。

(1)パワーアップタイマー:
電源投入時に、電源電圧が安定になるまでタイマーをかけて、確実にPICが動作するようにする機能です。PWRTともいいます。ここをチェックし、パワーアップタイマーの機能を使います。

(2)ブラウンアウトリセット:
PICの動作中に突然電源が切れたり電圧が低下したりしたときに、PICが誤動作して外部に余計な信号を出さないように、PICの動作を停止させる機能です。BORともいいます。ここをチェックし、ブラウンアウトリセットの機能を使います。

(3)低電圧プログラミング許可:
PIC16F87Xは、+5Vの低電圧でも書き込みできる機能がありますが、RB3が低電圧プログラミング専用のポートとなるため、低電圧プログラミングではRB3が使えなくなります。
このターゲットボードは+13Vで書き込みをするため、低電圧プログラミングの許可を設定しても無意味です。ここのチェックをはずし、低電圧プログラミング許可は使用しません。

(4)プログラムメモリ書き込み許可:
EEPROMエリアのデータメモリのプロテクト指定です。EEPROMに書き込みしても問題がなければチェックします。

(5)デバッガ許可:
PIC16F87Xは、MPLAB 使用の際に簡単なインサーキットデバッガ機能が使えるようになっていますが、ここでは使用しません。

(6)ウオッチドッグタイマー:
ウオッチドッグタイマーは、PICのプログラムの異常を常に監視して、万一異常になったときには、初期スタートから再開させて正常な状態に戻す働きをします。WDTともいいます。ここでは使用しません。

図10は、PIC16F877のコンフィギュレーションビット(レジスタ:CONFIG,アドレス2007h)について示しています。コンフィグレーションビットは、1ワード(14ビット)で構成されています。コンフィグレーションビットは、プログラム実行中には読み書きできない特殊なメモリで、書き込みはライターで行います。このビットは、PICの基本的な動作状態の指定や、プログラムにプロテクトを書けて読み出しても中身が分からないようにするなどの設定をするビットとなっています。この特殊領域のアドレスは、2007hとなっていますが、ビットの位置や内容はデバイスによって異なっています。

PIC16F877のコンフィギュレーションビット
図10. PIC16F877のコンフィギュレーションビット


コンフィグレーションビットの種類と意味を表2にまとめてみました。
「参考文献: MICROCHIP社 PIC16F87X データシート」

表2. コンフィギュレーションビットの種類一覧(PIC16F877)
bit 記号 名称 内容 MPLAB
パラメータ
13,12 CP1,CP0 フラッシュプログラムメモリ
コードプロテクションビット
 (注2)
00 0000h から1FFFh を
コードプロテクション
_CP_ALL
01 1000h から1FFFh を
コードプロテクション
_CP_HALF
5,4 10 1F00h から1FFFh を
コードプロテクション
_CP_UPPER_256
11 コードプロテクションなし _CP_OFF
11 DEBUG インサーキットデバッガモード インサーキットデバッガにする
(RB6 とRB7 はデバッガ専用ピン)
_DEBUG_ON
インサーキットデバッガモードにしない
(RB6とRB7 は汎用I/O ピン)
_DEBUG_OFF
10 機能なし 「1」としてリードする
WRT フラッシュプログラム
メモリライトイネーブル
プロテクトされていないプログラム
メモリは、EECONコントロールによる
ライトが可能
_WRT_ENABLE_ON
プロテクトされていないプログラム
メモリは、EECONコントロールによる
ライトが不可能
_WRT_ENABLE_OFF
CPD データEE メモリコードプロテクト データEEPROM メモリを
コードプロテクトする
_CPD_ON
コードプロテクトしない _CPD_OFF
LVP 低電圧プログラミング
イネーブルビット
RB3/PGM ピンにはPGM 機能があり、
低電圧プログラミングが可能にする
_LVP_ON
RB3 はディジタルI/O で、
プログラミングには
MCLRに高電圧を使用する
_LVP_OFF
BODEN ブラウンアウトリセット
イネーブルビット(注1)
BOR を動作させる _BODEN_ON
BOR を動作させない _BODEN_OFF
PWRTE パワーアップタイマ
イネーブルビット(注1)
PWRT を動作させない _PWRTE_OFF
PWRT を動作させる _PWRTE_ON
WDTE ウォッチドッグタイマ
イネーブルビット
WDT を動作させる _WDT_ON
WDT を動作させない _WDT_OFF
1,0 FOSC1,FOSC0 オシレータセレクションビット 00 LP オシレータ _LP_OSC
01 XT オシレータ _XT_OSC
10 HS オシレータ _HS_OSC
11 RC オシレータ _RC_OSC

(注1)ブラウンアウトリセットをイネーブルにすると、ビットPWRTE の値に関係なく自動的にパワーアップタイマ(PWRT)がイネーブルになります。ブラウンアウトリセットがイネーブルの時は常にパワーアップタイマをイネーブルにします。
(注2)CP1:CP0 ペアのすべてに同じ値を入力して、リスト上のコードプロテクションをイネーブルにします。


<項目>PICの動作確認
コンフィグの書き込みが完了すると、MCLRによるリセットが自動的にかかって、PICが動作します。図11は、RBポートのLEDを点灯させるプログラムを書き込んで、動作を確認したところです。

書き込み前 書き込み後
図11(a).書き込み前 図11(b).書き込み後




<戻る>
<TOPページへ>



Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!